<?php

namespace app\api\controller;
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/11/29/029
 * Time: 14:55
 */

include_once  __DIR__ . '/../../../extend/WxPay/WxPay.Api.php';
include_once Env::get('root_path') . 'extend/Alipay/AopSdk.php';
use think\facade\Env;
use app\api\service\Pay as PayService;
use think\facade\Log;

// 支付回调控制器
class PayNotify extends BaseController {

    // 微信回调方法
    public function redirectNotify()
    {
        //通知频率为15/15/30/180/1800/1800/1800/1800/3600，单位：秒

        //1. 检查库存量，超卖
        //2. 更新这个订单的status状态
        //3. 减库存
        // 如果成功处理，我们返回微信成功处理的信息。否则，我们需要返回没有成功处理。

        //特点：post；xml格式；不会携带参数
        $notify = new \WxPayNotify();
        $notify->Handle(false);
    }


    /**
     * 支付宝回调方法
     */
    public function aliNotify() {
        $data = input('param.');
        file_put_contents(Env::get('root_path') . 'runtime/ali_notify.txt', date('Y-m-d H:i:s') . " \n " . json_encode($data));

        $signType = $data['sign_type'];
        $sign = $data['sign'];
        unset($data['sign_type']);
        unset($data['sign']);
        ksort($data);

        $c = new \AopClient;

        $check_sign = $c->generateSign($data, $signType);
        if ($check_sign != $sign) {
            Log::init(
                [
                    'type' => 'File',
                    'path' => LOG_PATH,
                    'level' => ['error']
                ]);
            Log::record('签名错误，'. date('Y-m-d H:i:s') .' || check_sign：' . $check_sign . ', sign：' . $sign, 'error');
            return 'fail'; // 请不要修改或删除
        }

        $pay_sn = $data["trade_no"]; //支付单号
        $out_trade_no = $data['out_trade_no']; //订单号
        $order_price = $data['buyer_pay_amount']; //订单支付金额

        file_put_contents('../runtime/NotifyProcess.txt', "验证通过，开始回调 \n ", FILE_APPEND);
        $pay_result = PayService::pay_notify($order_price, $out_trade_no, $pay_sn, 'alipay', '支付宝支付');
        if ($pay_result) {
            // 支付成功
            return 'success'; // 请不要修改或删除
        } else {
            // 支付失败
            return 'fail'; // 请不要修改或删除
        }
    }
}